// pages/newAddr/newAddr.js
var util = require('../../utils/util.js')
Page({

  /**
   * 页面的初始数据
   */
  data: {
    allowedDistance: 4500, //允许配送范围：3000米
    addrLabel: ['家', '公司', '学校', '其他'],
    // 老地址
    // shopLatitude: 34.7989400000,
    // shopLongtitude: 117.1324900000,
    // 镇中街
    // shopLatitude: 34.806324,
    // shopLongtitude: 117.123805,
    // 2025-04-17 搬至：留城路80号（鑫苑社区北门往东第二个门面
    shopLatitude: 34.799083,
    shopLongtitude: 117.132254,
  },

  //------------------------------------------------------点击【选择按钮】触发事件
  selectAddressFromMap: function () {
   this.getUserLocation()
  },
  //-----------------------------------获取用户位置权限:return [0：授权失败；1：授权成功]
  getUserLocation: function () {
    var that = this
    wx.getSetting({
      success(res) {
        if (!res.authSetting['scope.userLocation']) {
          console.log('用户尚未授权：获取地理位置权限')
          wx.authorize({
            scope: 'scope.userLocation',
            success() {
              that.selectAddress();
            },
            fail(err) {
              //说明用户首次授权时点击了[拒绝]
              wx.showModal({
                title: '友情提示',
                content: '检测到您没有打开获取位置权限，是否去设置打开？',
                success: function (res) {
                  if (res.cancel) {
                    //取消授权
                  } else if (res.confirm) {
                    console.log('进入设置界面')
                    //确定授权，通过wx.openSetting发起授权请求
                    wx.openSetting({
                      success: function (res) {
                        if (res.authSetting["scope.userLocation"] == true) {
                          wx.showToast({
                            title: '授权成功',
                            icon: 'success',
                            duration: 1000
                          })
                        } else {
                          wx.showToast({
                            title: '授权失败',
                            icon: 'none',
                            duration: 1000
                          })
                        }
                      }
                    })
                  }
                }
              })
            }
          })
        } else {
          that.selectAddress();
        }
      },
      fail(res) {
        console.log('获取用户设置失败')
      }
    })
  },
  //-----------------------------------打开地图供用户选择地址
  selectAddress_old: function () {
    wx.showLoading({
      title: '获取位置中',
    })
    var that = this;
    var howFar = 0;
    wx.getLocation({
      type: "gcj02",
      success: function (res) {
        wx.chooseLocation({
          //成功选择位置
          success: function (res) {
            console.log(res)
            var m = that.calculateHowFarAway(res.latitude, res.longitude, that.data.shopLatitude, that.data.shopLongtitude)
            console.log(m,"米")
            that.setData({
              'editAddr.distance': m,
              'editAddr.address': res.address + ' ' + res.name,
              'editAddr.latitude': res.latitude,  //纬度
              'editAddr.longitude': res.longitude //经度
            })
          }
        })
      },
      fail: err => {
        wx.showModal({
          title: '友情提示',
          content: '获取位置失败',
          showCancel: false
        })
        console.log(err)
      }
    })

  },
  selectAddress: function () {
    wx.showLoading({
      title: '获取位置中',
    })
    var that = this;
    var howFar = 0;
    wx.chooseLocation({
      //成功选择位置
      success: function (res) {
        console.log(res)
        var m = that.calculateHowFarAway(res.latitude, res.longitude, that.data.shopLatitude, that.data.shopLongtitude)
        console.log(m,"米")
        that.setData({
          'editAddr.distance': m,
          'editAddr.address': res.address + ' ' + res.name,
          'editAddr.latitude': res.latitude,  //纬度
          'editAddr.longitude': res.longitude //经度
        })
      },
      fail: err=> {
        console.log(err)
      },
      complete: res => {
        wx.hideLoading()
      }
    })

  },
  //-----------------------------------用来判断用户目的地和店家间的距离
  calculateHowFarAway: function (lat1, lng1, lat2, lng2) {

    lat1 = lat1 || 0;

    lng1 = lng1 || 0;

    lat2 = lat2 || 0;

    lng2 = lng2 || 0;

    var rad1 = lat1 * Math.PI / 180.0;

    var rad2 = lat2 * Math.PI / 180.0;

    var a = rad1 - rad2;

    var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;

    var r = 6378137;

    return (r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b / 2), 2)))).toFixed(0)

  },
  //-----------------------------------地址标签【点击事件】
  labelClick: function (e) {

    var label = e.currentTarget.dataset.label;

    this.setData({
      'editAddr.label': label
    })

  },
  //-----------------------------------【表单提交】
  formSubmit: function (e) {
    //--------------------------------每次提交时，先重新获取店铺设置中的支持派送范围
    let that = this
    //加载过程中，重新获取settings
    util.queryShopSettings().then(res => {
      //将数据库中存储的设置显示至当前设置页面
      let settings = res.data
      console.log(settings)
      that.setData({
        allowedDistance: settings.sendDistance
      })
    }).then(res => {
      //--------------------------------
      let editAddress = e.detail.value

      console.log(editAddress)
      //console.log(editAddress)
      //********1.对用户填写信息的校验********
      //1.1 联系人姓名必填
      if (editAddress.name == "") {
        wx.showToast({
          icon: 'none',
          title: '请填写联系人姓名',
          duration: 1500
        })
        return;
      }
      //1.2 手机号必填且格式需要正确
      //手机号正则
      var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/;
      //电话
      var phone = editAddress.phone.trim();
      if (!phoneReg.test(phone)) {
        wx.showToast({
          icon: 'none',
          title: '请填写有效的手机号码',
          duration: 1500
        })
        return;
      }
      //1.3 地址必填  ||  editAddress.address == 0
      if (editAddress.address == "") {
        wx.showToast({
          icon: 'none',
          title: '请选择地址',
          duration: 1500
        })
        return;
      }
      //1.4 检测配送范围
      if (Number(editAddress.distance) > Number(this.data.allowedDistance)) {
        wx.showModal({
          title: '超出配送范围(' + (Number(this.data.allowedDistance)/1000).toFixed(1)+'公里内)',
          content: '请重新选择配送地址！您也可以返回首页，选择其他就餐方式。',
          showCancel: false
        })
        return;
      }

      //********2.运行至此，说明填写信息均无误-[记录地址信息至内存]********

      var addrList = wx.getStorageSync('addrList');

      if (addrList == "") //如果列表为空
      {
        var temp = [];
        temp.push(editAddress)
        wx.setStorageSync('addrList', temp)
      }
      else {
        if (this.data.addressId != -1) //为-1说明为new页面，否则为edit页面
        {
          //先删除原有数组中的地址，再新增
          addrList.splice(this.data.addressId, 1)
        }
        addrList.splice(0, 0, editAddress)//将新增或者编辑的地址，存储到数组中的首个元素中
        wx.setStorageSync('addrList', addrList)
      }
      //********3.记录当前地址至全局变量，并跳转到订单选择界面********
      getApp().globalData.order.addressInfo = editAddress;
      wx.navigateBack({
        delta: 2
      })
      //this.sendTemplate(e.detail.formId);
    })
      .catch(function (res) {
        wx.showModal({
          title: '网络错误',
          content: '请检查网络状态后，稍后再尝试编辑地址',
        })
      })

  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

    //尝试获取option数据，如果获取到，说明用户是点击【编辑按钮】跳转到此页面
    try {
      var editAddrInfo = options.editAddrInfo
      this.setData({
        editAddr: JSON.parse(editAddrInfo),
        addressId: options.addressid
      })
    }
    catch (e) {
      this.setData({
        editAddr: {
          name: '',
          sex: '',
          phone: '',
          address: '',
          addNumber: '',
          label: '',
          distance: 0
        },
        addressId: -1
      })
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
})